home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 43
/
Amiga Format CD43 (1999)(Future Publishing)(GB)(Track 1 of 2)[!][issue 1999-09].iso
/
-serious-
/
comms
/
other
/
pegmail
/
source
/
converter.c
next >
Wrap
C/C++ Source or Header
|
1999-06-14
|
4KB
|
175 lines
//----------------------------------------------------------------------------
// wczytaj (polish :)) loads pl into bufor - dl length, returns length or 0
//----------------------------------------------------------------------------
static unsigned long wczytaj(STRPTR pl,char *bufor,unsigned long dl)
{
long fh;
long res;
APTR buf;
buf=(APTR)bufor;
fh=Open(pl,MODE_OLDFILE);
if (fh)
{
res=Read(fh,buf,dl);
Close(fh);
if (res==NULL) return 0;
}
return dl;
}
//----------------------------------------------------------------------------
// dlugosc (polish again :) returns length of file 'plik' or -1 when plik
// doesn't exists.
//----------------------------------------------------------------------------
static unsigned long dlugosc(STRPTR plik)
{
BOOL res;
BPTR lk;
unsigned long wlk;
struct FileInfoBlock *fib; //wskaznik na strukture fib
//----
lk=Lock(plik,ACCESS_READ);
if (lk) {
fib = AllocDosObject(DOS_FIB,NULL); //alokacja fib'a
res=Examine(lk,fib); //sprawdzenie locka -> FIB
UnLock(lk);
wlk=fib->fib_Size; //fib_Size zawiera dlugosc
FreeDosObject(DOS_FIB,fib);
return wlk;
}
return -1;
}
#define E_NO_S_FILE -1 // no file / 0 size
#define E_NO_MEM -2 // no memory
#define E_NO_D_FILE -3 // no dest file
#define E_CANT_LOAD -4 // can't load source file
#define E_NOT_PEG -5 // can't load source file
static long konwertuj(STRPTR source, STRPTR dest)
{
static unsigned long wlk;
static unsigned long res;
long i=0;
static long ret=0;
static char *buf;
static char *p, *p1, *p2, *p3, *p4;
static char adr[200], dtyg[20], mi[10], dz[10], cz[20], rok[10];
static BPTR fh;
static char pom[500];
wlk = dlugosc(source);
if (wlk > 0)
{
buf = AllocVec( wlk+4, MEMF_ANY);
if (buf)
{
res = wczytaj(source, buf, wlk);
if (res)
{ // MAIN LOOP
buf[wlk]=0;
p=buf;
p1=strstr(p,"-- End --");
if (p1)
{
fh = Open(dest, MODE_NEWFILE);
if (fh)
{
do
{
p1=strstr(p,"-- End --");
if (p<buf+wlk-100)
{
i++;
p2=strstr(p,"From:"); // szukam "From:"
p3=strchr(p2,'<'); //
p4=strchr(p3,'>'); //wycinam adres
strncpy(adr,p3+1,p4-p3-1); // kopiuje adres do adr
adr[p4-p3-1]=0; // wstawiam \x00
p2=strstr(p,"Date:");
p3=strchr(p2,',');
strncpy(dtyg,p3-3,3);
dtyg[3]=0;
p4=strchr(p3+2,' ');
strncpy(dz,p3+2,p4-p3-2);
strncpy(mi,p4+1,3);
dz[p4-p3-2]=0;
mi[3]=0;
p3=strchr(p4+5,' ');
strncpy(rok,p4+5,p3-p4-5);
rok[p3-p4-5]=0;
p4=strchr(p3+1,' ');
strncpy(cz,p3+1,p4-p3-1);
cz[p4-p3-1]=0;
sprintf(pom, "From %s %s %s %s %s %s\n",adr, dtyg, mi, dz, cz, rok);
Write(fh, pom, strlen(pom) );
Write(fh, p, p1-p);
}
p=p1+11;
} while (p1 != NULL);
ret=(long)i;
Close(fh);
} else ret = E_NO_D_FILE; // !fh
} else ret = E_NOT_PEG; // nie jest to plik pegasusa...
} else ret = E_CANT_LOAD; // !res
FreeVec(buf);
} else ret = E_NO_MEM; // !buf
} else ret = E_NO_S_FILE; // !wlk
return ret;
}
static long cut13(STRPTR plik)
{
static unsigned long wlk;
static unsigned long res;
static long ret=0;
static BPTR fh;
char *buf, *p, *p1;
wlk = dlugosc(plik);
if (wlk > 0)
{
buf = AllocVec( wlk+4, MEMF_ANY);
if (buf)
{
res = wczytaj(plik, buf, wlk);
if (res)
{
fh = Open(plik, MODE_NEWFILE);
if (fh)
{
p=buf;
do
{
p1=strchr(p,'\r');
if (p1)
{
Write(fh,p,p1-p);
p=p1+1;
}
else if (p < buf+wlk) Write(fh,p,buf+wlk-p);
} while (p1 != NULL);
Close(fh);
} else ret = E_NO_D_FILE;
} else ret = E_NO_S_FILE;
FreeVec(buf);
} else ret = E_NO_MEM;
} else ret= E_NO_S_FILE;
return ret;
}